Games202-3 Real-time Environment Mapping

Mesh Distance FieldsReal Shading in Unreal Engine 4

a). Shading from Environment Lighting(IBL)

EnvironmentLight01a

  • 通过环境贴图着色的方式,又被命名为 Image-Based Lighting (IBL)

a.1). How

EnvironmentLight01b

  • 对于IBL,可以看做是上半球(可以联想下UE中的HDRI)的光照和BRDF的积分;
  • Observation:

    IBL_BRDF

    • 对于Glossy,其BRDF支持集很小(Lobe范围小);

    • 对于Diffuse,其BRDF非常平滑;

    • 联想到上节课渲染方程不等式成立的条件(拆出乘积积分的那个)

      IBL_BRDF02

      • 这里$\Omega_{G}$ 指积分域上,$g(x)$有值的区域。

        • 如$g(x)$ 为BRDF,$\Omega_{G}$ 即为原点向Lobe各点出发,与积分半球相交的区域集合

          IBL_BRDF02b


We can safely take the lighting term out!

IBL_BRDF03

我们把渲染方程分为了两部分积分,分别是:

  • 在$\Omega_{fr}$(即Lobe对应的半球区域),对光照Radiance积分
  • 在半球内对BRDF积分;

a.2). Lighting(对Radiance积分)

  • Lighting:

    • 即在$\Omega_{fr}$(即Lobe对应的半球区域),对光照Radiance积分,再归一化(normalize,分母用于归一化);

    • 类比于PCF,就是对Environment Map做滤波;

      IBL_Prefiltering

      • 滤波方法:Mipmap
  • IBL_Prefiltering02

    • 在Shading中,需要获得Lighting项的值,只需要求得Environment Map对应Mipmap层Lobe中点(镜面反射方向)方向的结果

      • 和百人计划图形2.5中,做Relief Mapping时在Unity用到的texCUBElod(),对Mipmap采样联系上了;
      1
      fixed3 Reflection = ACESToneMapping(texCUBElod(_CubeMap, float4(worldRef, (255-_Gloss)*8/255)).rgb, 1) * SpecularTint * _EnvIntensity;

a.3). 对BRDF积分(Split Sum)

SplitSum_2

假设使用微表面理论的BRDF

MicrofacetBRDF

  • 做法: 预计算考虑进所有变量(roughness、color等)的可能值的积分;
  • 但是,维度过高,存储成本过高,因此需要降维;
  • 降维过程:

    1. 对应微表面BRDF,只考虑Fresnel term($F(i,h)$)和distribution of normals($D(h)$)

    2. Fresnel term采用the Schlick’s approximation

      SplitSum_2b

      • 至此,积分降维为三维
        • $R_0$ :零度菲涅尔值
        • $\alpha$ :可表示为roughness,$\alpha$ 越大,越粗糙;
        • $\theta(\theta_h)$ :在实时渲染中,我们认为出射角入射角以及入射角/出射角与半程向量的夹角,这三者是相同性质的(不是说值近似相等,而是指作为积分的元素效果相同
    3. 在对BRDF的积分式中,通过Schlick’s approximation,将$R_0$拆出,即写成下列式子

      SplitSum_3

      • 积分现在被降维为二维($R_0$被拆出,$f_r$中的菲涅尔项被分母抵消)
        • $\alpha$
        • $\theta$
    4. 至此,我们对积分的两项分别进行预计算,储存在表格或者图片中(R、G通道分别两项积分结果)通过LUT查询即可

      SplitSum_4

      • 而$R_0$ 则可通过BaseColor(Metallic Workflow)、Specular(Specular Workflow)贴图或软件内置(一般默认为4%)即可获得;(看百人计划美术 2.7 Metallic与Speculer流程)
  • 名字由来: Split sum

    SplitSum_0

假设使用Lambert的BRDF

  • $f_r = {1\over \pi}$
  • $\int_{\Omega^+}cos\theta_i d\omega_i = \pi$ (看Games101 Lecture 17-18 Materials二重积分)
  • 所以正好BRDF积分为1

b). Shadow from Environment Light

  • 在实时渲染中,没有完美的解决方案;

    IBL_Shadow

    • 难以用实时渲染方程(那个不等式)来近似:
      • Support大,为整个半球
      • 带有Gloosy项,不够smooth
  • 工业界方法:

    • 只计算最亮的灯光(如UE中HDRI带一个Direction Light)
  • Related research
    • Imperfect shadow maps
    • Light cuts
    • RTRT (Real-Time Ray Tracing, might be the ultimate solution)
    • Precomputed radiance transfer(PRT)

c). Spherical Harmonics(SH, 球面谐波函数)

c.1). 前置知识

Fourier Transform

FourierTransform

  • 这里是偶函数,所以 $sin$ 项系数都为0

    FourierTransform_Freq

Convolution Theorem

Convolution

  • 时域卷积等于频域乘积

A general understanding

A general understanding_Basic

  • product intergral: 相乘后积分,对应离散的情况就是相乘后相加。如:

    • $n$维向量$\bold{a} = (x_1, x_2,…,x_n)$ 和 $\bold{b} = (y_1, y_2,…,y_n)$ 进行product intergral,即点乘

      $\bold{a} \cdot \bold{b} = x_1y_1+x_2y_2+…+x_ny_n$

  • 我们认为,函数相乘后积分(product intergral),就是滤波(卷积)

  • 积分结果的频率,取决于频率最低的项($f(x),g(x)$)

Basis Functions(基函数)

BasisFunc

  • $c_i$ 为系数
  • 如傅里叶变换中,各项就为正交基;
  • 或者多项式和泰勒展开等

c.2). 简介

What?

  • 球谐函数一系列 二维球面函数的正交基函数

    • 球谐函数具有正交、归一、完备性

    • $f(\omega)$ 为球面函数,$\omega$ 为向量

    • $c_i$ 为系数

    • $B_{i}(\omega)$ 则为球谐函数

      SH_01a

      • 说明:
        1. 每一行($l=n$),频率相同
        2. 对于$l=n$行(第$n$阶),函数数量为$2l+1$
        3. 每一阶各SH都有编号,即$m$ 从$-l$ 到 $l$;

How?

  • 每一阶的SH函数,由勒让德多项式求得;

  • 如何求得$c_i$

    • 投影(Projection)

      SH_01b

      • 类似于傅里叶展开中,函数和各个正交基相乘求系数

c.3). 性质

SH_BasisFunc

  • 正交性;
  • 投影性;
  • 旋转方便(旋转$f(x)$,相当于旋转基函数$B(i)$)
    • SH中,旋转后的基函数,可通过同阶的基函数线性组合得到;

d). Shading from Environment Lighting(SH, Diffuse项)

d.1). 简介

EnvironmentLight01b

SH_Shading

  • 如果不通过IBL方式,计算shading,那可以通过SH展开$L_i(p,\omega_i)$ ,即展开Environment Map(Environment Map可以写成二维函数)

d.2). 分析Diffuse项的BRDF

SH_Shading02

  • $A_l$ 就是基函数的系数;
  • 由图可见,通过SH分析Diffuse项的BRDF后,可得出结论
    • 当$l\geq3$ (即第四阶开始),其 $A_l$ 接近0,说明Diffuse项的BRDF频率低,由SH前三阶表示即可;

积分结果的频率,取决于频率最低的项($f(x),g(x)$)

  • Diffuse BRDF acts like a low-pass filter
  • 因此,对于Environment Map的展开,只需要SH前三阶即可

d.3). SH展开Environment Map

SH_Shading03

SH_Shading04

  • 通过求得各球谐函数的结果后,再通过结果逆变换得到Shading结果
    • 通过ShadingPoint法线,再经过一系列计算(?)得到shading

e). Precomputed Radiance Transfer

PRT_01a

  • 对于渲染方程,如果我们把它每一项都进行Brute-force(蛮力)计算
    • $L_i$ : 二维,方位角$\omega$和俯仰角$\theta$
    • $V(i)$ : 二维,方位角和俯仰角
    • $\rho(\mathbf{i}, \mathbf{o})$ : 四维,入射角和出射角的方位角和俯仰角
  • 存储压力过于大;

e.1). PRT

  • 前提: 假设场景中除了Lighting,其他都不变;

PRT_01b

  • 将RE分为两项,
    • Lighting变化;
    • light transport不变;
      • $V(i): $ 二维,$\omega,\theta$,可烘焙为图像,如CubeMap(场景摆放固定)
      • $\rho(\mathbf{i}, \mathbf{o}): $ BRDF
        • Diffuse Case: 常数
        • Gloosy Case: 四维,$\omega_{i},\theta_i, \omega_o,\theta_o$,入射和出射的方位角和俯仰角(相机固定,入射角固定)

e.2). Diffuse Case

PRT_DiffuseCase01

  • 此处(图形学中,大部分情况都是),积分和求和位置可变;

  • 经过预计算后,求得Shading结果只需要在SH空间中,对向量进行点乘即可

    PRT_02b

PRT_02


PRT_03

e.2.1). 计算

PRT_DiffuseCase02

PRT_DiffuseCase03

  • 注意: 此处两次求和复杂度仍然是$O(n)$,因为SH基函数具有正交性;
  • Runtime is independent of transport complexity

    PRT_LightTrans

  • 计算Light Transport简易理解: 积分形式和渲染方程相似,$B_i(\bold{i})$ 类似于$L_i(\bold{i})$ ,可看成是将球谐函数作为光照进行Shading得到Light Transport结果

    PRT_LightTrans02

e.3). Glossy Case

PRT_GlossyCase

  • 此时,BRDF是关于入射和出射的方位角和俯仰角的四维函数;
  • 做法: 对 $\bold{o}$ 也进行SH展开;(对于Gloosy不止展开到第三阶)
    • light coefficient与Diffuse Case相同,为SH空间的一维向量;
    • transport matrix则是关于 $\bold{o}$ 和 $\bold{i}$ 四维函数(入射和出射的方位角和俯仰角),为SH空间的二维矩阵;
    • reflected radiance coefficient则是关于 $\bold{o}$ 的二维函数(出射角的方位角和俯仰角),通过SH逆变换,即可得出相应视角( $\bold{o}$ )下的Gloosy radiance;
      • 具体怎么变换的?待实现

e.4). 总结和限制

PRT_Summary

PRT_Limitations


f). Wavelet(小波)

Wavelet01

  • 定义在二维平面上的一系列基函数

  • A non-linear approximation: 二维函数经过小波变换后,大部分系数接近0,这时可采用只记录系数大于一定值的项来近似原函数;

    Wavelet02

    • 对于Environment Map,小波变换无法变换球面函数,因此展开为Cubemap后进行小波变换;
    • 每一个矩形经过小波变换后,把高频信息放在右上、右下、左下子块,剩下的低频信息放在左上,继续做小波变换;
  • 其他应用:JPG格式图片压缩, 使用类似与小波变换的DCT(Discrete cosine transform,离散余弦变换)、JPEG2000

  • 效果对比:

    Wavelet03

  • 缺点:

    • 旋转不方便(不同于SH基函数的旋转简易型,小波旋转需要从Wavelet展开,旋转后再做小波变换)